import { defineStore } from 'pinia' // 导入Pinia
import { ref } from 'vue' // 导入ref
import { processPayment, getPaymentMethods, createOrderFromCart, checkPaymentStatus } from '@/api/payment' // 导入支付API

export const usePaymentStore = defineStore('payment', () => {
  // 响应式数据
  const paymentMethods = ref<{[key: string]: string}>({}) // 支付方式列表
  const currentOrder = ref<any>(null) // 当前订单
  const loading = ref(false) // 加载状态
  const paymentResult = ref<any>(null) // 支付结果
  const paymentInfo = ref<any>(null) // 支付信息（二维码等）
  const paymentStatus = ref<string>('pending') // 支付状态：pending, paid, failed

  // 获取支付方式列表
  const fetchPaymentMethods = async () => {
    try {
      loading.value = true // 开始加载
      const response = await getPaymentMethods() // 调用API获取支付方式
      if (response.data && response.data.success) { // 如果请求成功
        paymentMethods.value = response.data.paymentMethods // 保存支付方式列表
      }
      return response.data // 返回数据
    } catch (error) {
      console.error('获取支付方式失败:', error) // 打印错误信息
      throw error // 抛出错误
    } finally {
      loading.value = false // 结束加载
    }
  }

  // 创建订单（从购物车）
  const createOrder = async (userId: number, orderData: {
    totalAmount: number // 总金额
    receiverName: string // 收货人姓名
    receiverPhone: string // 收货人电话
    receiverAddress: string // 收货地址
    paymentMethod: string // 支付方式
    remark?: string // 备注
    items?: Array<{ // 购物车商品列表
      productId: number // 商品ID
      productName: string // 商品名称
      productImage?: string // 商品图片
      price: number // 商品价格
      quantity: number // 商品数量
      subtotal: number // 小计
    }>
  }) => {
    try {
      loading.value = true // 开始加载
      const response = await createOrderFromCart(userId, orderData) // 调用API创建订单
      if (response.data && response.data.success) { // 如果创建成功
        currentOrder.value = response.data.order // 保存当前订单
      }
      return response.data // 返回数据
    } catch (error) {
      console.error('创建订单失败:', error) // 打印错误信息
      throw error // 抛出错误
    } finally {
      loading.value = false // 结束加载
    }
  }

  // 处理支付（生成支付二维码）
  const pay = async (userId: number, orderId: number, paymentMethod: string) => {
    try {
      loading.value = true // 开始加载
      const response = await processPayment(userId, orderId, paymentMethod) // 调用API处理支付
      console.log('支付响应:', response) // 调试信息
      if (response.data && response.data.success) { // 如果支付成功
        console.log('支付信息:', response.data.paymentInfo) // 调试信息
        paymentInfo.value = response.data.paymentInfo // 保存支付信息
        paymentStatus.value = 'pending' // 设置支付状态为等待中
      } else {
        console.error('支付失败:', response.data) // 调试信息
      }
      return response.data // 返回数据
    } catch (error) {
      console.error('支付失败:', error) // 打印错误信息
      throw error // 抛出错误
    } finally {
      loading.value = false // 结束加载
    }
  }

  // 检查支付状态
  const checkPayment = async (userId: number, orderId: number) => {
    try {
      const response = await checkPaymentStatus(userId, orderId) // 调用API检查支付状态
      if (response.data && response.data.success) { // 如果请求成功
        if (response.data.paid) { // 如果已支付
          paymentStatus.value = 'paid' // 设置支付状态为已支付
          // 更新当前订单状态
          if (currentOrder.value && currentOrder.value.id === orderId) { // 如果是当前订单
            currentOrder.value = response.data.order // 更新订单信息
          }
        } else { // 如果未支付
          paymentStatus.value = 'pending' // 设置支付状态为等待中
        }
      }
      return response.data // 返回数据
    } catch (error) {
      console.error('检查支付状态失败:', error) // 打印错误信息
      throw error // 抛出错误
    }
  }

  // 清空支付状态
  const clearPaymentState = () => {
    currentOrder.value = null // 清空当前订单
    paymentResult.value = null // 清空支付结果
    paymentInfo.value = null // 清空支付信息
    paymentStatus.value = 'pending' // 重置支付状态
  }

  return {
    // 状态
    paymentMethods, // 支付方式列表
    currentOrder, // 当前订单
    loading, // 加载状态
    paymentResult, // 支付结果
    paymentInfo, // 支付信息
    paymentStatus, // 支付状态
    
    // 方法
    fetchPaymentMethods, // 获取支付方式列表
    createOrder, // 创建订单
    pay, // 处理支付
    checkPayment, // 检查支付状态
    clearPaymentState // 清空支付状态
  }
}) 